package com.nanhai.buddhist.college.module.collegebase.service.classes;

import java.util.*;
import javax.validation.*;

import com.nanhai.buddhist.college.module.collegebase.api.collegeclass.dto.ClassesInfoDTO;
import com.nanhai.buddhist.college.module.collegebase.api.collegeclass.vo.ClassesInfoDTOPageVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.classes.vo.ClassesCreateReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.classes.vo.ClassesExportReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.classes.vo.ClassesPageReqVO;
import com.nanhai.buddhist.college.module.collegebase.controller.admin.classes.vo.ClassesUpdateReqVO;
import com.nanhai.buddhist.college.module.collegebase.dal.dataobject.classes.ClassesDO;
import com.nanhai.buddhist.college.framework.common.pojo.PageResult;
import com.nanhai.buddhist.college.module.collegebase.dal.dataobject.classes.ClassesInfoDO;
import com.nanhai.buddhist.college.module.collegebase.dal.dataobject.classes.CollegeAndClassesDO;

/**
 * 学校管理-班级 Service 接口
 *
 * @author 开发
 */
public interface ClassesService {

    /**
     * 创建学校管理-班级
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createClasses(@Valid ClassesCreateReqVO createReqVO);

    /**
     * 更新学校管理-班级
     *
     * @param updateReqVO 更新信息
     */
    void updateClasses(@Valid ClassesUpdateReqVO updateReqVO);

    /**
     * 删除学校管理-班级
     *
     * @param id 编号
     */
    void deleteClasses(String id);

    /**
     * 获得学校管理-班级
     *
     * @param id 编号
     * @return 学校管理-班级
     */
    ClassesDO getClasses(String id);

    /**
     * 获得学校管理-班级列表
     *
     * @param ids 编号
     * @return 学校管理-班级列表
     */
    List<ClassesDO> getClassesList(Collection<String> ids);

    /**
     * 获得学校管理-班级分页
     *
     * @param pageReqVO 分页查询
     * @return 学校管理-班级分页
     */
    PageResult<ClassesDO> getClassesPage(ClassesPageReqVO pageReqVO);

    /**
     * 获得学校管理-班级列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 学校管理-班级列表
     */
    List<ClassesDO> getClassesList(ClassesExportReqVO exportReqVO);

    /**
     * 根据专业获取班级列表
     * @param professionsId
     * @return
     */
    List<ClassesDO> getClassesListByProfessionsId(String professionsId);

    /**
     * 根据系部获取班级列表
     * @param departmentsId
     * @return
     */
    List<ClassesDO> getClassesListByDepartmentsId(String departmentsId);


    List<String> getClassesByTeacherId(String teacherId);

    /**
     * id 获取班级信息
     * @param classesId
     * @return
     */
    ClassesDO getClassesInfoDTOById(String classesId);

    /**
     * 根据教师id 获取班级信息列表
     * @param teacherId
     * @return
     */
    List<ClassesDO> getClassesInfoDTOListByTeacher(String teacherId);

    /**
     * 根据教师id 获取班级信息分页
     * @param req
     * @return
     */
    PageResult<ClassesDO> getClassesInfoDTOPageByTeacher(ClassesInfoDTOPageVO req);

    /**
     * 获取学院， 系部， 专业 等信息
     * @param classesIds
     * @return
     */
    List<ClassesInfoDO> selectClassBaseInfoByClassesId(Collection<String> classesIds);


    ClassesInfoDO  getClassesParentInfoDTOByClassesId(String id);

    List<ClassesInfoDO> selectClassesInfoByCollege(Collection<String> collegeIds);


    List<ClassesInfoDO> selectClassBaseInfoByProfessionIds(Collection<String> professionIds);


}
